package pe.edu.sistemas.samupg.repository.dao.impl;

import java.util.Date;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.sistemas.samupg.domain.model.Periodo;
import pe.edu.sistemas.samupg.repository.dao.PeriodoDAO;

@Repository
@Transactional
public class PeriodoDAOImpl extends PeriodoDAO {

	@PersistenceContext(unitName = "SAMUPGtomcatPU")
	private EntityManager em;
	
	@Override
	protected EntityManager getEntityManager() {
		return em;
	}
	
	public void guardarPeriodoActual(Periodo periodo) {
        Periodo periodoLocal = getPeriodoActual();
        periodoLocal.setActual(false);
        periodoLocal.setFechaFin(new Date());
        em.merge(periodoLocal);
        
        em.persist(periodo);
    }
	
	public Periodo getPeriodoActual() {
		String s = "Select p from Periodo p where p.actual = TRUE";
		
	    try {
	    	return (Periodo) em.createQuery(s).getSingleResult();
		} catch (NoResultException e) {
			return null;
		}
	}

	@Override
	public void cerrarPeriodoActual() {
		String s = "update Periodo p SET p.actual= FALSE, p.fechaFin=:fecha where p.actual = TRUE";
		Query query = em.createQuery(s);
		query.setParameter("fecha", new Date());
		query.executeUpdate();
	}	
}
